from django.contrib.auth.backends import ModelBackend

from apps.users.models import User
from apps.users.utils import get_user_by_username


class MeiduoModelBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        # 判断是否通过vue组件发送请求, 如果传递了request就是前台用户登陆
        if request is None:
            try:
                # 判断后台登陆用户是否有管理员权限
                user = User.objects.get(username=username, is_staff=True)
            except User.DoesNotExist:
                return None
            # 判断密码
            if user.check_password(password):
                return user

        else:
            # 变量username的值，可以是用户名，也可以是手机号，需要判断，再查询
            try:
                # 使用前台多账号登陆的判断方法
                user = get_user_by_username(username)
            except:
                return None
        # 判断密码
        if user.check_password(password):
            return user
        else:
            return None